<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Bootstrap Plugin Test Suite</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- jQuery -->
    <script src="vendor/jquery.min.js"></script>
    <script>
        // Disable jQuery event aliases to ensure we don't accidentally use any of them
        (function () {
            var eventAliases = [
                'blur',
                'focus',
                'focusin',
                'focusout',
                'load',
                'resize',
                'scroll',
                'unload',
                'click',
                'dblclick',
                'mousedown',
                'mouseup',
                'mousemove',
                'mouseover',
                'mouseout',
                'mouseenter',
                'mouseleave',
                'change',
                'select',
                'submit',
                'keydown',
                'keypress',
                'keyup',
                'error',
                'contextmenu',
                'hover',
                'bind',
                'unbind',
                'delegate',
                'undelegate'
            ]
            for (var i = 0; i < eventAliases.length; i++) {
                var eventAlias = eventAliases[i]
                $.fn[eventAlias] = function () {
                    throw new Error('Using the ".' + eventAlias + '()" method is not allowed, so that Bootstrap can be compatible with custom jQuery builds which exclude the "event aliases" module that defines said method. See https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#js')
                }
            }
        })()
    </script>

    <!-- QUnit -->
    <link rel="stylesheet" href="vendor/qunit.css" media="screen">
    <script src="vendor/qunit.js"></script>
    <script>
        // See https://github.com/axemclion/grunt-saucelabs#test-result-details-with-qunit
        var log = []
        // Require assert.expect in each test
        QUnit.config.requireExpects = true
        QUnit.done(function (testResults) {
            var tests = []
            for (var i = 0, len = log.length; i < len; i++) {
                var details = log[i]
                tests.push({
                    name: details.name,
                    result: details.result,
                    expected: details.expected,
                    actual: details.actual,
                    source: details.source
                })
            }
            testResults.tests = tests

            window.global_test_results = testResults
        })

        QUnit.testStart(function (testDetails) {
            $(window).scrollTop(0)
            QUnit.log(function (details) {
                if (!details.result) {
                    details.name = testDetails.name
                    log.push(details)
                }
            })
        })

        // Cleanup
        QUnit.testDone(function () {
            $('#qunit-fixture').empty()
            $('#modal-test, .modal-backdrop').remove()
        })

        // Display fixture on-screen on iOS to avoid false positives
        if (/iPhone|iPad|iPod/.test(navigator.userAgent)) {
            QUnit.begin(function () {
                $('#qunit-fixture').css({top: 0, left: 0})
            })

            QUnit.done(function () {
                $('#qunit-fixture').css({top: '', left: ''})
            })
        }

        // Disable deprecated global QUnit method aliases in preparation for QUnit v2
        (function () {
            var methodNames = [
                'async',
                'asyncTest',
                'deepEqual',
                'equal',
                'expect',
                'module',
                'notDeepEqual',
                'notEqual',
                'notPropEqual',
                'notStrictEqual',
                'ok',
                'propEqual',
                'push',
                'start',
                'stop',
                'strictEqual',
                'test',
                'throws'
            ];
            for (var i = 0; i < methodNames.length; i++) {
                var methodName = methodNames[i];
                window[methodName] = undefined;
            }
        })();
    </script>

    <!-- Plugin sources -->
    <script>$.support.transition = false</script>
    <script src="../../js/alert.js"></script>
    <script src="../../js/button.js"></script>
    <script src="../../js/carousel.js"></script>
    <script src="../../js/collapse.js"></script>
    <script src="../../js/dropdown.js"></script>
    <script src="../../js/modal.js"></script>
    <script src="../../js/scrollspy.js"></script>
    <script src="../../js/tab.js"></script>
    <script src="../../js/tooltip.js"></script>
    <script src="../../js/popover.js"></script>
    <script src="../../js/affix.js"></script>

    <!-- Unit tests -->
    <script src="unit/alert.js"></script>
    <script src="unit/button.js"></script>
    <script src="unit/carousel.js"></script>
    <script src="unit/collapse.js"></script>
    <script src="unit/dropdown.js"></script>
    <script src="unit/modal.js"></script>
    <script src="unit/scrollspy.js"></script>
    <script src="unit/tab.js"></script>
    <script src="unit/tooltip.js"></script>
    <script src="unit/popover.js"></script>
    <script src="unit/affix.js"></script>

</head>
<body>
<div id="qunit-container">
    <div id="qunit"></div>
    <div id="qunit-fixture"></div>
</div>
</body>
</html>
